iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0

在我們開發完成 DAG 之後,通常並非一次性就結束了,隨著時間過去,需求有持續不斷的改變,而我們的程式也必須持續的修改以及優化。有一個良好的開發流程以及 CI/CD 流程,可以幫助我們開發以及部署的品質。

Git Flow 開發流程

這邊以 Gitflow 開發流程作為基礎來介紹 DAG 的開發部署流程。Gitflow 是許多團隊的開發時會參考的流程,於2010年時由 Vincent Driessen 在 nvie 發表。Gitflow 將不同分支分配給非常具體的角色,並定義它們應該在何時以及怎麼交互。
https://ithelp.ithome.com.tw/upload/images/20231013/20140477CwPi0erSBZ.png
圖片出處:
https://nvie.com/posts/a-successful-git-branching-model/

對於不熟悉流程的人我們可以參考 Vincent Driessen 的文章(文章位置同上圖圖片出處)

在 Gitflow 的建議中,開發分成幾種branch:

  • Master
    主要的產品branch,包含了已經經過測試和驗證的穩定代碼。當開發完成並經過測試,可以合併到 Master branch,形成新的版本。

  • Develop
    作為持續開發的分支,包含了最新的功能和修復。所有新功能和修復的工作都在這個分支上進行,並進行持續集成和測試。

  • Feature
    用於開發單獨的功能或新功能。從 develop 拉出開發,開發完成後合併回 develop。

  • Release
    開發到一定階段時,用於準備新版本的發布,使用 release 階段做上線前的最後測試。

  • Hotfix
    用於緊急修復產品的錯誤。production環境中出現錯誤,創建一個hotfix branch,進行修復。完成後,合併回 develop 和 master。

在我們 DAG 開發時,我們根據開發的階段會使用到不同的開發環境,也會將 DAG 部署到不同的環境當中。因此針對以上的 Gitflow 我們也需要設定相對的環境。

環境設置

在開發時,我們要管理的不只是程式碼,同時也需要對於開發的環境。在上述的開發 branch 中,我們需要盡量保持各個環境的獨立,避免環境設定彼此互相干擾,也確保同樣的程式能夠在各個環境都能正確地執行。
要能做到比較完整的開發流程,基本上我們會需要四個環境進行開發為佳,當然隨著團隊的考量以及預算的考量,可以對此作出取捨

  • Test 環境
    在開發者進行開發的環境,會於使用者拉出 feature branch,進行開發時使用。此環境可以架設成與 Production環境類似的環境,抑或是可以讓開發者使用 local 環境開發。但由於 Airflow 會觸及到許多服務,因此也需要花費一定資源研究 local 端的設定。
  • Dev 環境
    feature 開發完之後我們會併入 develop branch,進行開發部分的運行以及測試,此時就會使用到 Dev 環境。
  • Staging 環境
    開發到一定成熟度時,已經要做上線預備時,我們會把 code 發佈到 release branch。release branch 會部署到 staging 環境。在這環境通常會需要讓開發者以及客戶或是產品使用者都能夠使用的位置。能夠在這環境做上線前的最後確認。staging 環境的設定基本上要能跟 Production 環境一致,降低產品上線出現問題的風險。
  • Production 環境
    併回 Master 上線的程式,會部署在 Production 環境中,這環境便是產品主要使用的環境。

由於上述環境基本上都會是相同的配置,所以如果能使用 IaC(Infrastructure as Code)工具來進行配置,會是對於我們的工作非常的有幫助,既可以提升建立速度,也可以確保不會有人為疏失的干擾。可以參考的服務有 Terraform、AWS CDK、Azure Resource Manager (ARM) Templates、Azure Bicep、Google Cloud Deployment Manager 等等。

CI/CD

在開發以及部署的流程中,CI/CD可以幫助我們有品質及有效率的提升整體流程。CI/CD 代表持續整合(Continuous Integration)和持續交付/持續部署(Continuous Delivery/Continuous Deployment)。其核心在於自動化和改善軟體交付過程,以實現更快速、可預測和可靠的軟體交付。

在 Gitflow 開發流程中,除了在 feature branch 開發之外,我們 merge 到 develop、release、master 都可以加入 CI/CD pipeline 使用程式自動部署至上述我們所說明的對應環境當中。在CI/CD 中也包含了測試,因此也可以使用程式做最基本的功能檢測。如此可以提升軟體品質,也可以開發者許多寶貴的時間。

CI/CD使用各種工具和平臺實現,包括Jenkins、Travis CI、CircleCI、GitLab CI/CD、GitHub Actions等。而雲服務提供商像是AWS、Azure、Google Cloud也皆有提供了CI/CD服務。

CI/CD可以參考下面範例:

jobs: testing:
  runs-on: ubuntu-22.04 
  steps:
    - uses: actions/checkout@v1 
    - name: Setup Python
      uses: actions/setup-python@v1 
      with:
        python-version: 3.7.0 
        architecture: x64
        
    - name: Install Flake8 
      run: pip install flake8
      
    - name: Run Flake8 
      run: flake8
 
    - name: Install Pylint 
      run: pip install pylint
      
    - name: Run Pylint
      run: find . -name "*.py" | xargs pylint --output-format=colorized
      
    - name: Install dependencies
      run: pip install apache-airflow==2.6.0 pytest
    - name: Test DAG  run: pytest tests/

在 merge 至指定 branch 時觸發相關的 CI/CD 流程,可以將我們之前所寫的 DAG 經過測試後部署至相對環境當中,使開發團隊能夠更快地交付高品質的 Data pipeline。

今天講到了許多關於開發及部署流程的部分,對於這些流程,每個團隊所看重的部分不同,因此了解各種做法之後可以與團隊共同討論,找出最適合自己的產品以及自己團隊的做法!


上一篇
『Day27』來幫 DAG 寫寫測試吧
下一篇
『Day29』DAG 程式碼設計優化方向
系列文
Data pipeline 建起來!用 Airflow 開發你的 Data pipeline30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言